import React, { PureComponent } from 'react';
/**
 *
 * react-decoration
 *
 * 关于装饰器(decorator)的说明：
 * http://es6.ruanyifeng.com/#docs/decorator
 * 使用装饰器修饰的class、属性、方法；但不能修饰函数，害怕状态提升；
 *
 * [React.js] 用 @decorator 來裝飾你的 Component 吧！
 * https://larrylu.blog/react-decorator-hoc-2536db2737cb
 *
 * 装饰器(Decorator)在React中的应用
 * decorator 也是普通的 function
 * https://www.jianshu.com/p/275bf41f45cf
 *
 * 在一个类上增加这个装饰器，表示这个类是一个未完成的功能，
 * 将会展示成一个即装到来的友好页面，可以设置倒计时时间
 * @param {*} title setTitle 组件选项
 * WrappedComponent 被包裹的组件本身；修饰那个类，就是那个类
 *
 * 使用方式 @setTitle('这里是标题')
 */
//开始定义装饰器
//看到两个箭头函数感觉懵逼了，转化一个也就是一个函数里返回一个函数再返回一个组件包裹器而已
//title参数对应上面的“Profile Page”字符串
//WrappedComponent参数对应上面的Profile组件
//然后在组件加载完修改了title，在返回一个新组件，是不是很像高阶组件呢
const setTitle = title => WrappedComponent =>
  class extends React.Component {
    componentDidMount() {
      document.title = title;
    }

    render() {
      return <WrappedComponent {...this.props} />;
    }
  };

export default setTitle;
